package com.capgemini.business.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.capgemini.business.entity.Users;
import com.capgemini.business.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController  // 表示这个类是一个REST控制器，用来处理HTTP请求并返回相应数据，通常JSON或XML格式
@RequestMapping("/user")  // 指定处理请求的基本URL路径/user，所有请求都需要以此为开头
public class UsersController {

    private static final Logger logger = LoggerFactory.getLogger(UsersController.class);  // 记录日志信息

    @Autowired  // 用于自动注入UsersMapper对象，使得可以在当前类直接使用UsersMapper
    private UsersMapper usersMapper;

    // 调用获取所有用户数据的接口
    @GetMapping("/")  // 指定处理GET请求的方法，这里"/"表示根路径
    public Object index(@RequestParam(required = false) String id) {
        if (id == null) {
            // 没有提供 id，返回所有用户
            return usersMapper.findAll();  // 调用UsersMapper中的findAll方法
        } else {
            try {
                // 提供了 id，转换为 int 并返回对应用户
                int userId = Integer.parseInt(id);
                Users user = usersMapper.findUserById(userId);
                if (user != null) {
                    return user;
                } else {
                    return "用户未找到";
                }
            } catch (NumberFormatException e) {
                logger.error("格式错误: {}", id);
                return "错误，ID格式不正确";
            }
        }
    }

    // 调用添加用户数据的接口
    @PostMapping("/addUser")  // 指定处理POST请求的方法，当客户端发送POST请求，将调用addUser()方法
    public String addUser(@RequestBody Users user) {  // 这里注解用于指定请求体中的数据将被映射到User类中
        try {
            logger.info("接收add请求: {}", user);

            // 检查编号是否已存在
            Users existingUser = usersMapper.findUserById(user.getUserID());
            if (existingUser != null) {
                return "错误，编号已存在，请重试！";
            }

            usersMapper.insertUser(user);  // 调用插入方法将用户数据插入数据库
            return "用户添加成功！";
        } catch (Exception e) {
            logger.error("添加失败: {}", e.getMessage());
            e.printStackTrace();  // 用于打印异常信息的方法。有异常时，这个方法会打印异常的堆栈跟踪信息到控制台
            return "错误，用户添加失败，请重试！";
        }
    }

    // 调用修改用户数据的接口
    @PutMapping("/updateUser")
    public String updateUser(@RequestBody Users user) {
        try {
            logger.info("接收update请求: {}", user);

            // 检查编号是否存在
            Users existingUser = usersMapper.findUserById(user.getUserID());
            if (existingUser == null) {
                return "错误，用户未找到，请重试！";
            }

            usersMapper.updateUser(user);  // 调用更新方法将用户数据更新到数据库
            return "用户信息更新成功！";
        } catch (Exception e) {
            logger.error("更新失败: {}", e.getMessage());
            e.printStackTrace();
            return "错误，用户信息更新失败，请重试！";
        }
    }

    // 调用删除用户数据的接口 通过id
    @DeleteMapping("/deleteUser/{id}")  // /{id} 表示该方法可以接收一个路径参数
    public String deleteUser(@PathVariable int id) {  // 用于获取上面路径的参数，会将路径中的{id}与方法参数 int id绑定起来
        try {
            usersMapper.deleteUser(id);  // 调用删除方法将指定id的用户数据从数据库中删除
            return "用户信息删除成功！";
        } catch (Exception e) {
            logger.error("删除失败: {}", e.getMessage());
            e.printStackTrace();
            return "错误，用户信息删除失败，请重试！";
        }
    }
}
